//
//  test.c
//  TestCallC
//
//  Created by mac on 2025/9/4.
//

#include "test.h"

void testC() {
    printf("testC in called\n");
}

BatmanData* processBatman(const char *data) {
    char *dataCopy = strdup(data);
    if (dataCopy == NULL) {
        return NULL;
    }
    
    BatmanData *batman = (BatmanData*)malloc(sizeof(BatmanData));
    if (batman == NULL) {
        return NULL;
    }
    batman->Tbatt = NULL;
    batman->Vbatt = NULL;
    batman->Ibatt = NULL;
    batman->GGSOC = NULL;
    batman->UISOC = NULL;

    char *line = strtok(dataCopy, "\n");
    while (line != NULL) {
        if (strncmp(line, "Tbatt:", 6) == 0) {
            if (batman->Tbatt != NULL) {
                free(batman->Tbatt);
            }
            batman->Tbatt = trimWhitespace(line + 6);
        }
        else if (strncmp(line, "Batt_Temp:", 10) == 0) {
            if (batman->Tbatt != NULL) {
                free(batman->Tbatt);
            }
            batman->Tbatt = trimWhitespace(line + 10);
        }
        else if (strncmp(line, "Vbatt:", 6) == 0) {
            if (batman->Vbatt != NULL) {
                free(batman->Vbatt);
            }
            batman->Vbatt = trimWhitespace(line + 6);
        }
        else if (strncmp(line, "Batt_V:", 7) == 0) {
            if (batman->Vbatt != NULL) {
                free(batman->Vbatt);
            }
            batman->Vbatt = trimWhitespace(line + 7);
        }
        else if (strncmp(line, "Ibatt:", 6) == 0) {
            if (batman->Ibatt != NULL) {
                free(batman->Ibatt);
            }
            batman->Ibatt = trimWhitespace(line + 6);
        }
        else if (strncmp(line, "Avg_IBatt:", 10) == 0) {
            if (batman->Ibatt != NULL) {
                free(batman->Ibatt);
            }
            batman->Ibatt = trimWhitespace(line + 10);
        }
        else if (strncmp(line, "GGSOC:", 6) == 0) {
            if (batman->GGSOC != NULL) {
                free(batman->GGSOC);
            }
            batman->GGSOC = trimWhitespace(line + 6);
        }
        else if (strncmp(line, "UISOC:", 6) == 0) {
            if (batman->UISOC != NULL) {
                free(batman->UISOC);
            }
            batman->UISOC = trimWhitespace(line + 6);
        }
        line = strtok(NULL, "\n");
    }
    return batman;
}

char* trimWhitespace(char *str) {
    if (str == NULL) {
        return NULL;
    }
    while (isspace((unsigned char)*str)) {
        str++;
    }
    if (*str == '\0') {
        return str;
    }
    char *end = str + strlen(str) - 1;
    while (end > str && isspace((unsigned char)*end)) {
        end--;
    }
    end[1] = '\0';
    return strdup(str);
}
